package cinvestav.adviseme.databasemodel;

import java.util.List;
import java.util.Map;

import cinvestav.adviseme.datamodel.Persona;
import cinvestav.adviseme.util.DBException;

public interface IPersonaDB {

	/**
	 * Obtiene la lista de personas agregados de la base de datos
	 * @return Una lista parametrizada con los objetos cargados de la base de datos
	 * @throws DBException
	 */
	List<Persona> getAll() throws DBException;
	/**
	 * Obtiene la lista de amigos de una persona
	 * @param persona	Persona a la cual se desean buscar sus amigos
	 * @return	Retorna una lista de personas que corresponde a los amigos de la persona
	 * @throws DBException
	 */
	List<Persona> getFriends(Persona persona) throws DBException;
	/**
	 * Obtiene la lista de amigos de la persona en base a filtros seleccionados
	 * @param persona	Persona a la cual se le desean buscar sus amigos
	 * @param filtros	Filtros de busqueda
	 * @return	Retorna la lista de amigos de la persona
	 * @throws DBException
	 */
	List<Persona> getFriendsByFilter(Persona persona, Map<String,String[]> filtros) throws DBException;
	/**
	 * Obtiene una lista de personas deacuerdo al filtro seleccionado
	 * @param filtros	Filtro a utilizarse en la busqueda
	 * @return	Lista de personas que concuerden con el filtro indicado
	 * @throws DBException
	 */
	List<Persona> getByFiter(Map<String, String[]> filtros) throws DBException;    
	Boolean delete(Persona persona) throws DBException;
	Boolean insert(Persona persona) throws DBException;
	
	Boolean deleteFriendShip(Persona personaorigen, Persona personadestino) throws DBException;
	
	/**
     * Busca el usuario con el nombre de usuario indicado
     * @param userName  Nombre de usuario a buscar
     * @return  El usuario encontrado
     * @throws DBException
     */
    public Persona getByUserName(String userName) throws DBException;
}
